home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Learning Curve
/
The Learning Curve (Weird Science, 1996).iso
/
mathematics
/
plotters
/
plot
/
plot.doc
< prev
next >
Wrap
Text File
|
1991-02-11
|
10KB
|
251 lines
Amiga Plot V1.3a Joe Martin 7/88 (C)Copyright 1988
This program is not public domain. All rights retained. Permision is
granted to freely distribute this program as long as all documentation and
notices remain intact. Charges for such distribution are NOT permitted except
as a nominal disk charge !!
If you find this program useful, entertaining or educational, please donate
$20 to the author. Source code is available for an additional $20 by sending
check or money order to the address provided below. Donations will encourage
updates and more features.
****************************************************************************
Amiga Plot is a three dimesional mathematical function plotter.It takes
a function, derived by the user, parses it into a partially compiled form and
then calculates coordinates to be placed in the xyz system. AmigaPlot use
hidden line removal based on a principle known as the painters algorithm.
Each time AmigaPlot goes to the screen it places a filled polygon. Starting
from the most distant part of the plot it is constantly placing filled
polygons in front of other polygons there by covering the hidden portions of
the plot. Many aspects of the plot are user variable so that almost any
combination of rotations, perspectives, and parameters for any function can
produce infinite results. AmigaPlot is not intended for statistical analysis
and the precision of the plot or its scale are not guaranteed.
The use of color in the plot can produce very pleasing effects
especially when a feathered pallet is used. The idea of AmigaPlot is to
provide an artistic approach to the sometimes dry subjects of Analytical
Geometry and Trigonometry.
AmigaPlot was compiled on the Aztec C Compiler 3.6a
**** Minimum memory 512K - it uses most of it *****
************ 1 or 2 meg recommended **************
Address any questions, comments or bugs to:
Joe Martin
Hobbit Hole 1-904-243-6219 8N1
or
Joe Martin
2702 Willow Grove Ln.
Ft. Walton Bch. Fl 32548
****************************************************************************
known bugs:
1-some functions can produce values out of range.
2-extreme values can burden the Amiga clipping routines by requiring
more chip memory than is available !
(I've tried to help them out a little)
3-Rotations approaching 90 degrees will give distorted results(not
really a bug)
I'm working on better error checking but it'll be slow to come.
The Parser does very little error checking right now so watch your
spelling on trig function names.
****************************************************************************
1.3a
-Fixed bug in file requestor that didn't follow paths correctly.
-Loads in special Images for windows etc.(3.6a would have booted me out
of small data otherwise.
-User friendly rotation parms(degrees) and smoothing parms(xincr and
yincr).
****************************************************************************
1.3 additions:
1- save/load parameters and IFF support.
2- macro capability in function window.
3- sample functions(parms directory).
4- increased color span resolution to include floating point.
5- cosmetic window update.
Let's get to it !
********** First MAKE SURE YOUR STACK IS SET TO AT LEAST 20000 *************
AmigaPlot is initialized at the CLI by 'Run Plot' (don't forget to set stack
20000 first !)
For convenience, the directory 'parms' is included and includes numerous
function examples. These can be loaded from the 'Files' menu and make it
extremely easy to play with and to alter different functions known to yield
satisfatory results.
Also the directory 'pic' is included with one example of an Iff pic. This
picture can be viewed with any showiff program.
Three windows appear-
1- AmigaPlot window - for the plots.
2- Parms window - gadgets to select and change parameters.
3- Function window - for function input only.
There are three menus available for some parmameter changes, color etc.
Parms Window:
Gadgets:
Start starts plot
Stop stops plot in progress. Any parameter changes will go
into effect when the plot is restarted.
YRot changes perspective about the Y axis. range -90 - 90 degrees
XRot changes perspective about the X axis. range -90 - 90 degrees
Object changes depth perspective in conjuction with Image
distance from viewer to object
Image changes depth perspective in conjuction with Object
distance from viewer to Image
XRan This number represents the the outside dimensions of the loop
which will provide a value for the 'X' variable in the func-
tion. Ex XRan: 10 means a loop from -10 to 10
YRan Dimensions the loop for the Y variable in the function
Suggested ranges are from 25 down to 5.
XIncr the step increment for the XRan loop 1 - 8
YIncr the step increment for the YRan loop 1 - 8
Adjusting the X and Y increments will give the plot a smooth or jagged
appearence on most plots. Smaller increments take a lot longer to plot(much
more computing), but produce better pictures. '1' is smoothest, '8' coarsest.
XTrans this moves the center of the plot about the X axis
YTrans this moves the center of the plot about the Y axis
ScX this will adjust the width of the plot by the Scale factor
ScY this will adjust the height of the plot by the Scale factor
Function Gadgets:
There are 3 string gadgets available for function input:
f(x,y): this gadget is for entry of main function. Upper and lower case
is acceptable. Any operators, grouping sysbols, or trig function
names given below are acceptable.
Legal variable names : X,Y,A,B
A= : this gadget is useful for subfunctions and expressions and serves
as a macro for the main function f(x,y). If your main
function(f(x,y)) contains the 'A' variable, then this macro MUST
be defined in this gadget !
B= : this gadget is useful for subfunctions and expressions and serves
as a macro for the main function f(x,y). If your main
function(f(x,y)) contains the 'B' variable, then this macro MUST
be defined in this gadget !
Editing : same as for any string gadget - cursor keys, del, backSp
etc.
operations : +,-,*,/ divsion by zero is trapped.
^ to the power of
grouping : ()
functions : ABS() absolute value of
SQRT() Square root of
SQR() Square of
SIN() Sine of
ASIN() ArcSine of
COS() Cosine of
ACOS() ArcCosine of
TAN() Tangent of
ATAN() Arctangent of
LN() Natural Logarithm of
LOG() Base 10 Log of
EXP() Exponential of
Menus:
File Menu
Quit - Quit AmigaPlot (bye)
save
parms - this will save all parameters for easy retrieval. A file
requestor will prompt you for the file name. File name
extensions of '.parms' are recommended..
IFF - this will save the current visible screen to an IFF format
image. A file requestor will prompt you for the file name and
extensions of '.pic' are recommended.
load
parms- this will load a set of parameters, functions, window sizes,
color map etc. When plot is first run 'Default.parms' is
loaded if available. If you have a favorite function. then it
can be loaded at startup by saving its' parms as
'Default.parms'.
Parameters Menu - Same as the Parms gadgets(just for convience)
Display Menu -
Color Map - User selects color palette
ColorSpan - User selects color position/span(what heigth you want each color
to kick in. Decimal fractions can be entered for
finer color resolution.
XHatch - Outlines complete polygon on screen
Spec.Parms - Two gadgets:
Clip TAN - This is an adjustment for the TAN function which usually
produces very high values(out off range). You can
adjust the tops of these spikes.
Scale/0 - This one can adjust any case of division by zero. In other
words, instead of dividing by zero(which is undefined)
you can divide by the scale value.
****************************************************************************
Here are some sample functions :
1) COS((X^2+Y^2)/10)
Object:50 Image:650 XRange:10 YRange:10 XYIncr:.5
2) 2*SIN((X^2-Y^2)/10)
Object:50 Image:650 XRange:10 YRange:10 XYIncr:.5
3) .005*((X/Y)^2-(Y/X)^2)
Object:50 Image:650 XRange:10 YRange:10 XYIncr:.5
4) 3*SIN(-.05*(X^2-Y^2))-2*COS(.1*(X^2+Y^2))
Object:50 Image:650 XRange:10 YRange:10 XYIncr:.5
5) 4*(5*EXP(-(X^2+Y^2)/60)*SIN((X^2-Y^2)/10))
Object:130 Image:750 XRange:20 YRange:20 XYIncr:.5
6) TAN((X^2+Y^2)/50)
Object:80 Image:750 XRange:12 YRange:12 XYIncr:.5
**** Have Fun ****
****************************************************************************